<?php
namespace Zxf5115\Laravel\Kernel\Traits;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;

/**
 * @author zhangxiaofei [<1326336909@qq.com>]
 * @dateTime 2025-09-17
 *
 * 数据验证特性
 *
 * 提供统一的数据验证方法，处理请求数据的合法性校验
 */
trait ValidatorTrait
{
  /**
   * 验证请求数据并返回验证结果
   *
   * @param Request $request 请求对象
   * @param array $messages 自定义错误消息
   * @param array $rules 验证规则
   * @return array 包含验证状态和数据
   */
  public function validation(Request $request, array $messages, array $rules) : array
  {
    try
    {
      Validator::make($request->all(), $rules, $messages)->validate();

      return [
        'status' => true,
        'message' => __('kernel.verification_success')
      ];
    }
    catch (ValidationException $e)
    {
      return [
        'status' => false,
        'message' => $this->getFirstErrorMessage($e),
      ];
    }
  }


  /**
   * 获取验证异常中的第一个错误消息
   *
   * @param ValidationException $e 验证异常
   * @return string 错误消息
   */
  protected function getFirstErrorMessage(ValidationException $e) : string
  {
    $errors = $e->errors();

    if(empty($errors))
    {
      return __('kernel.verification_failed');
    }

    $firstError = reset($errors);

    return is_array($firstError) ? (string) reset($firstError) : (string) $firstError;
  }
}
